package TCP;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * 测试类，用于演示通过Java的InetAddress类获取和处理IP地址和主机名的功能。
 */
public class Day01_InetAddress_Test {
    public static void main(String[] args) {
        // 1. 获取本机相关信息
        try {
            InetAddress address;
            address = InetAddress.getLocalHost(); // 获取本机地址
            System.out.println(address);
            System.out.println(address.getHostAddress()); // 打印本机IP地址
            System.out.println(address.getHostName()); // 打印本机主机名

            // 2. 进行回环测试（使用回环地址，如127.0.0.1）
            InetAddress address2 = InetAddress.getLoopbackAddress(); // 获取回环地址
            System.out.println(address2);
            System.out.println(address2.getHostName()); // 打印回环地址的主机名
            System.out.println(address2.getHostAddress()); // 打印回环地址的IP地址

            // 3. 根据给定的主机名获取其IP地址
            InetAddress address3 = InetAddress.getByName("www.baidu.com");
            System.out.println(address3);
            System.out.println(address3.getHostName()); // 打印百度网站的主机名
            System.out.println(address3.getHostAddress()); // 打印百度网站的IP地址

            // 4. 根据给定的主机名，获取系统上配置的名称服务返回的所有IP地址组成的数组
            InetAddress [] addresses = InetAddress.getAllByName("www.baidu.com");
            for (InetAddress address22 : addresses){
                System.out.println(address22); // 打印所有解析到的IP地址
            }

            // 5. 获取此InetAddress对象的原始IP地址，并以字节形式展示
            InetAddress address4 = InetAddress.getByName("www.baidu.com");
            byte[] array = address4.getAddress();
            for (byte add : array){
                if (add < 0){
                    // IP地址的字节表示中，负数表示10进制中的10000000~11111111
                }
                System.out.println(add); // 打印每个字节的值
            }
            System.out.println(array.length); // 打印IP地址的字节长度

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

    }

}
